function test_01() {
	// 以下所有操作都在控制台上操作
	// console.log();

	//弹出框-弹出信息
	alert("Hello World");

	//字符串应用
	var name = "SunYuLin";
	var age = 19;
	console.log(`${name} 今年 ${age} 岁`);

	//字符串的方法
	var test = "Welcome ChongQing.";
	console.log(test.length);
	console.log(test.toUpperCase());
	console.log(test.toLowerCase());
	console.log(test.substring(0, 10));
	console.log(test.substring(7));

	//数组
	var arr = ["sunyulin", 19, true, null];
	console.log(arr);
	console.log(arr.length);
	console.log(arr[1]);
	console.log((arr.length = 5));
	console.log((arr[1] = 99));
	console.log(arr);
	console.log(arr.indexOf("sunyulin")); //索引
	console.log(arr.slice(0, 3)); //索引0到3
	console.log(arr.slice(3)); //索引从3开始
	console.log(arr.push("19", "32")); //尾部添加
	console.log(arr);
	console.log(arr.pop()); // 尾部删除，返回删除元素，空数组返回 undefined
	console.log(arr.unshift("A", "81")); // 首部添加
	console.log(arr.shift()); // 首部删除，返回删除元素，空数组返回 undefined
	arr.sort();
	console.log(arr);
	arr.reverse(); // 反转
	console.log(arr);
	console.log(arr.splice(2, 3, "Google", "Facebook"));
	// 从索引 2 开始删除 3 个元素，然后再添加两个元素
	console.log(arr);
	console.log(arr.concat([1, 2, 3])); //合并数组
	console.log(arr);
	console.log(arr.join("-")); //拼接字符串
	console.log(arr);

	//对象
	// 无需集合
	// 对象表示：{...}
	// 键值申明 xxx:xxx,
	var student = {
		id: 11923040212,
		name: "sunyulin",
		age: 19,
		gender: "female",
		city: "chongqing",
	};
	console.log(student);
	console.log(student.name);
	console.log((student.email = "2829305462qq.com")); //添加
	console.log((student.age = "20")); //修改
	console.log(student.city); //查看
	console.log(student);
	delete student.gender; //删除
	console.log(student.hasOwnProperty("gender")); //是否存在
	console.log(student);

	//map
	// ES6 引入新类型，key 可以为任意类型，键值对有序；
	// 删除只能对key[类型任意，有序]
	var map = new Map(); // 空 Map
	map.set("name", "sunyulin"); // 新增
	map.set("age", 19); // 新增
	console.log(map);
	console.log(map.has("name")); // 判断是否存在
	console.log(map.get("age")); // 获取，没有返回 undefined
	console.log(map.delete("age")); // 删除 key
	console.log(map);

	//set
	// ES6 引入新类型，key 集合，去重；
	var s1 = new Set(); // 空 Set
	var s2 = new Set([1, 2, 3]); // 含1, 2, 3
	s1.add(4);
	console.log(s1);
	s2.delete(3);
	console.log(s2);

	var set = new Set();
	set.add(name);
	set.add(11);
	console.log(set);

	//运算符
	console.log(5 % 3);
	console.log(5 % -3);
	console.log(-5 % 3);
	console.log(-5 % -3);
	console.log(2 / 0); //无限大
	console.log(0 / 0); //无值

	//比较运算符
	console.log(1 == "1");
	console.log([1, 2, 3] == new Array(1, 2, 3));
	console.log([] == []);
	console.log(null == undefined); //自动转类型
	console.log(null === undefined); //不会转类型，类型不一致则返回 false
	console.log(isNaN(NaN));

	//逻辑运算符：&& || ! ---- 与或非；

	//条件判断
	var age = 19;
	if (age >= 18) {
		alert("国之栋梁");
	} else if (age >= 6) {
		alert("少年");
	} else {
		alert("儿童");
	}

	var xiuwei = 108;
	if (xiuwei >= 100) {
		alert("渡劫飞升");
	} else if (xiuwei >= 80) {
		alert("化神期或大乘期");
	} else {
		-alert("修仙蝼蚁");
	}

	///循环///

	// for 循环
	var arr = ["Apple", "Google", "Microsoft"];
	var i, x;
	for (i = 0; i < arr.length; i++) {
		x = arr[i];
		console.log(x);
	}

	// for in 循环数组
	var a = ["A", "B", "C"];
	for (var i in a) {
		console.log(i); // '0', '1', '2'
		console.log(a[i]); // 'A', 'B', 'C'
	}

	// for in 循环对象属性
	var o = {
		name: "Jack",
		age: 20,
		city: "Beijing",
	};
	for (var key in o) {
		if (o.hasOwnProperty(key)) {
			console.log(key); // 'name', 'age', 'city'
		}
	}

	// while 循环
	var x = 0;
	var n = 99;
	while (n > 0) {
		x = x + n;
		n = n - 2;
	}

	// do while 循环
	var n = 0;
	do {
		n = n + 1;
	} while (n < 100);

	// for ... of 循环
	// list、set、map类别
	// 由in变为of
	var a = ["A", "B", "C"];
	var s = new Set(["A", "B", "C"]);
	var m = new Map([
		[1, "x"],
		[2, "y"],
		[3, "z"],
	]);
	for (var x of a) {
		// 遍历Array
		console.log(x);
	}
	for (var x of s) {
		// 遍历Set
		console.log(x);
	}
	for (var x of m) {
		// 遍历Map
		console.log(x[0] + "=" + x[1]);
	}

	// forEach 循环
	// list -- element
	// set -- element
	// map -- value
	var a = ["A", "B", "C"];
	a.forEach(function (element) {
		console.log(element);
	});
	var s = new Set(["A", "B", "C"]);
	s.forEach(function (element, sameElement, set) {
		console.log(element);
	});
	var m = new Map([
		[1, "x"],
		[2, "y"],
		[3, "z"],
	]);
	m.forEach(function (value, key, map) {
		console.log(value);
	});

	//变量常量
	// var、let声明变量
	var x = 100; //声明变量
	const PI = 3.14; //声明常量
	// 全局
	var course = "JavaScript";
	console.log(window.course);
	// 局部
	// 那里定义那里作用
	function foo() {
		for (var i = 0; i < 100; i++) {
			//
		}
		i += 100;
	}

	//函数
	// 函数是一等公民
	// 一等公民：可以作为函数参数，可以作为函数返回值，也可以赋值给变量；
	// ES6 引入 rest 参数，可变参数；
	// function 函数名(x, y...) {// 函数体}；
	function foo(a, b, ...rest) {
		console.log(a);
		console.log(b);
		console.log(rest);
		console.log(arguments.length); // arguments 无需定义
	}

	// 函数 apply 方法
	// 第一个参数为 this，第二个参数为 Array，为函数参数
	console.log(Math.max.apply(null, [3, 5, 4]));

	// 函数 call 方法
	// 第一个参数为 this，在函数参数依次传入
	console.log(Math.max.call(null, 3, 5, 4));

	//函数方法
	// --对象的方法，对象绑定函数
	var person = {
		name: "sunyulin",
		birth: 2000,
		age: function () {
			var y = new Date().getFullYear();
			return y - this.birth;
		},
	};
	console.log(person.age);
	console.log(person.age());

	//箭头函数（Array）
	// // 无参
	// () => 3.14
	// // 一参
	// (num) => num;
	// // 二参
	// (x, y) => x * x + y * y
	// // 可变参数
	// (x, y, ...rest) => {
	//     var i, sum = x + y;
	//     for (i=0; i<rest.length; i++) {
	//         sum += rest[i];
	//     }
	//     return sum;
	// }

	//高阶函数
	let arr2 = [1, 2, 3, 4, 5, 19, 20];
	// 循环
	arr2.forEach((item) => console.log(item));
	// 包装
	console.log(arr2.map((item) => item * 3));
	// 累加
	var sum = 0;
	arr2.forEach(function (item) {
		sum += item;
	});
	console.log(sum);
	console.log(arr2.reduce((item1, item2) => item1 + item2));
	// 过滤
	console.log(arr2.filter((item) => item % 2 == 0));
	// 排序
	console.log(arr2.sort((a, b) => a - b));

	///标准对象///
	// Date构造：
	// 无参构造 -- 给定当前时间
	// 有参构造 -- 给定指定时间
	// 以下三种方法都是构成时间对象
	// Date
	var date = new Date(2022, 6, 15, 20, 15, 30, 123); //指定日期
	console.log(date.getFullYear() + "-" + (date.getMonth + 1) + "-" + date.getDate());
	console.log(Date.parse("2022-06-15 15:37:30")); //字符串转日期
	// 时间戳转日期
	var d = new Date(1435146562875);
	console.log(d.toLocaleString()); //本地时间
	console.log(d.toUTCString()); //带时间

	//正则 -- RegExp
	// 将对象通过正则()语言表达，进而进行判断或提取

	// . ---- 匹配任意字符；
	// \d ---- 匹配数字；
	// \w ---- 匹配字母；
	// \s ---- 匹配一个空格（包含tab）；
	// * ---- 任意个字符（包括0个）；
	// + ---- 至少一个字符；
	// ? ---- 表示0个或1个字符；
	// {n} ---- 表示n个字符；
	// {n,m} ---- 表示n-m个字符；
	// [] ---- 表示范围
	// ---- [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线；
	// () ---- 表示提取的分组，按照正则表达式拆分原始字符串，group(0)永远是原始字符串；
	// A|B ---- 匹配A或B；
	// ^ ----表示行的开头；
	// ^\d ---- 表示必须以数字开头；
	// $ ---- 表示行的结束；
	// \d$ ---- 表示必须以数字结束；

	// /^[0-9]+.?[0-9]*$/; //正小数
	// /^(0|\+?[1-9][0-9]*)$/; //0和正整数
	// /^[1-9]\d*$/; //正整数
	// /^\d+$|^(\d+).?(\d{1,2})$/; //保留两位小数，正数
	// /^(:?(:?\d+.\d+)|(:?\d+))$/; //double
	console.log();
	let regex = /^\d+$|^(\d+).?(\d{1,2})$/;
	// 构造正则表达式
	var re1 = /ABC\-001/;
	var re2 = new RegExp("ABC\\-001");
	// 正则验证
	var re = /^\d{3}\-\d{3,8}$/;
	console.log(re.test("010-12345")); // true
	console.log(re.test("010-1234x")); // false
	console.log(re.test("010 12345")); // false
	// 字符串切割
	console.log("a b   c".split(/\s+/));
	// 分组提取
	var re = /^(\d{3})-(\d{3,8})$/;
	console.log(re.exec("010-12345")); // ['010-12345', '010', '12345']
	console.log(re.exec("010 12345")); // null

	//JSON -- 包装JS对象
	console.log(person);
	// 序列化
	var s = JSON.stringify(person);
	console.log(s);
	// 反序列化
	// 将对象转化为JSON字符串
	console.log(JSON.parse("[1,2,3,true]")); // [1, 2, 3, true]
	console.log(JSON.parse('{"name":"小明","age":14}')); // Object {name: '小明', age: 14}
	console.log(JSON.parse("true")); // true
	console.log(JSON.parse("123.45")); // 123.45
	var result = eval("(" + 19 + ")"); // data 为 Json 字符串
	console.log(result);

	//Math
	console.log(Math.floor(Math.random() * 100 + 1)); // 1-100 随机数

	//浏览器对象
	// window
	//     充当全局作用域，而且表示浏览器窗口；
	//     window.innerWidth、window.innerHeight：浏览器窗口的内部宽度和高度；
	//     window.outerWidth、window.outerHeight：浏览器窗口的整个宽高和高度；
	//     navigator

	// 表示浏览器的信息；
	//     navigator.appName：浏览器名称；
	//     navigator.appVersion：浏览器版本；
	//     navigator.language：浏览器设置的语言；
	//     navigator.platform：操作系统类型；
	//     navigator.userAgent：浏览器设定的User-Agent字符串；
	//     screen

	// 表示屏幕信息；
	//     screen.width：屏幕宽度，以像素为单位；
	//     screen.height：屏幕高度，以像素为单位；
	//     screen.colorDepth：返回颜色位数，如8、16、24；
	//     location

	// 表示当前页面的 URL 信息；
	//     location.href: http://www.example.com:8080/path/index.html?a=1&b=2#TOP
	//     location.protocol; // 'http'
	//     location.host; // 'www.example.com'
	//     location.port; // '8080'
	//     location.pathname; // '/path/index.html'
	//     location.search; // '?a=1&b=2'
	//     location.hash; // 'TOP'
	//     location.reload(); // 重新加载当前页面
	//     location.assign('/'); // 设置一个新的URL地址
	//     document

	// 表示当前页面，由于 HTML 在浏览器中以 DOM 形式表示为树形结构，document 对象就是整个 DOM 树的根节点；
	//     document.title = 'SFAC';
	//     document.getElementById('dom-id'); // 按 ID 查找
	//     document.getElementsByTagName('div'); // 按 tag 查找
	//     history

	// 保存了浏览器的历史记录；
	//     history.back(); // 后退
	//     history.forward(); // 前进

	var user = {};
	user.userName = $("#userName").val();
	user.password = $("#passWord").val();
	console.log(user.userName);
	console.log(user.password);
	console.log(user);
}
